iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0

嗨呦!今天我們要繼續昨天有講到的N-gram

昨天我們提到 N-gram很常被用來計算句子的機率甚至預測下一個詞。但昨天也有根大家提到他有一些限制,那就是如果某個詞組在資料裡完全沒出現過,那它的機率就會被算成 0,進而導致整個句子的機率也變成 0,但問題是這只能代表在語料庫沒有出現過,不代表真實世界不可能出現!另外,如果機率是0其實對模型來說非常危險,他會認為這種東西就是不可能出現!所以一般來說我們都會避免資料有出現0的情況,所以呢!我們今天就是要來介紹可以解決N-gram 模型產出來的機率是0的問題!

Smoothing

那可以怎麼解決呢?通常我們會用smoothing(平滑)的方式來解決!
Smoothing 的做法有很多種今天我們就簡單介紹幾種最常見的三個:
(1) Add one smoothing (加一平滑)
(2) Add k smoothing (加k平滑)
(3) Back-off smoothing (倒退平滑)

Add one smoothing

也稱作是laplace smoothing
這種做法很直觀,就是把每一個詞組出現的機率都加ㄧ!這樣就算這個詞組並沒有出現在語料庫中,他的機率都不可能是0。他的算法會變公式如下:
https://ithelp.ithome.com.tw/upload/images/20251003/201787459G4d05TkjW.png

wi = 當前的詞
wi-1 = 前一個詞(這邊是以 bigram 為例)
C(x) = 出現次數(count)
V = 詞彙表大小 (Vocabulary size)

舉個簡單的例子
假設有一個句子:I love to eat delicious food
我們的詞彙表會是
V = {I, love, to, eat, delicious, food} → |V| = 6

如果以bigram 模型來說,想要算一組delicious 後面是接eat 的機率,也久是要計算P(eat|delicious),需要先算各詞組出現的次數:

C(I, love) = 1
C(love, to) = 1
C(to, eat) = 1
C(eat, delicious) = 1
C(delicious, food) = 1

如果是原本沒有平滑的方式計算會變成:

P(eat | delicious) = C(delicious, eat) / C(delicious)
                   = 0 / 1
                   = 0

使用add one 的方式:

P(eat | delicious) = ( C(delicious, eat) + 1 ) / ( C(delicious) + V )
                   = ( 0 + 1 ) / ( 1 + 6 )
                   = 1 / 7 ≈ 0.143

這樣對於沒看過的詞組,就不會有機率是0的問題啦~
但這種做法比較粗糙一點,在處理規模較大的語料可能會出現偏差問題(如果大部分都沒有出現過的話,其他有出現過的概率就會降低 qq)

Add k smoothing

add k smoothing 的方式可以算是Add-one smoothing 的一個改良版本,他主要是允許在詞的頻率上添加的數值,不一定是要1,只要大於0即可(K>0)。通過這樣的調整K的值,在處理較大的語料時,偏差會比較小,也就是比原本的add one smoothing 更具彈性,但是缺點就是怎麼選k值是一個問題,不同的語料可能會有不同的k值~

Back-off smoothing

跟名字很相關xd 就是會讓模型倒退一階,去計算出現次數。舉例來說,本來用 trigram 想要計算P(you | I love)出現的機率,結果發現語料庫裡沒有出現過「I love you」,那就退回去算 bigram P(you | love),啊如果再沒有,就變得用unigram計算P(you) 以此類推,從高階模型退成較低階的模型,借此避免出現0的問題!

好啦~以上就是簡單的介紹一下如何避免使用N-gram 時發生0的問題,不同做法也會有不同的優缺點,怎麼使用還是最主要看大家的任務為何,還有大家自己的考量🙂‍↕️🙂‍↕️

喔虧!那今天就先這樣 我們明天見嚕!


上一篇
Day 18 颱風天就是要__啊-- N-Gram 介紹(上)
下一篇
Day 20 讓電腦了解字詞語意 -- word2vec 介紹
系列文
ㄧ個八卦的時間也能了解AI最新趨勢21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言